Pagination এবং Sorting

Java Technologies - স্প্রিং বুট ওআরএম (Spring Boot ORM)
153

Spring Boot ORM-এ Pagination এবং Sorting হলো ডেটাবেস থেকে ডেটা রিট্রিভ করার প্রক্রিয়া যেখানে বড় ডেটাসেটকে পেজ আকারে বিভক্ত করে উপস্থাপন করা হয় এবং নির্দিষ্ট ক্রমানুসারে ডেটা সাজানো যায়। Spring Data JPA সহজে এই কাজটি করতে পারে।


Pagination এবং Sorting কীভাবে কাজ করে?

  1. Pagination: বড় ডেটাসেটকে ছোট ছোট পেজে বিভক্ত করা হয়। এটি সার্ভারের লোড কমায় এবং ডেটা দেখার সময় উন্নত পারফরম্যান্স নিশ্চিত করে।
  2. Sorting: ডেটাবেস থেকে ডেটা নির্দিষ্ট ক্রমানুসারে সাজানো হয়, যেমন নাম বা তারিখ অনুসারে।

Spring Data JPA এর মাধ্যমে Pageable এবং Sort ইন্টারফেস ব্যবহার করে Pagination এবং Sorting সহজেই ইমপ্লিমেন্ট করা যায়।


উদাহরণ: Pagination এবং Sorting ব্যবহার

১. Maven ডিপেনডেন্সি

pom.xml ফাইলে প্রয়োজনীয় ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

২. Entity তৈরি

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String department;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDepartment() {
        return department;
    }

    public void setDepartment(String department) {
        this.department = department;
    }
}

৩. Repository ইন্টারফেস

Spring Data JPA এর মাধ্যমে Pagination এবং Sorting ইমপ্লিমেন্ট করতে JpaRepository ব্যবহার করা হয়।

import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
}

৪. সার্ভিস ক্লাস

Pagination এবং Sorting এর জন্য সার্ভিস ক্লাস তৈরি করুন।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

@Service
public class EmployeeService {
    @Autowired
    private EmployeeRepository employeeRepository;

    public Page<Employee> getEmployees(int page, int size, String sortBy, String sortDirection) {
        Sort sort = sortDirection.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
        Pageable pageable = PageRequest.of(page, size, sort);
        return employeeRepository.findAll(pageable);
    }
}

৫. কন্ট্রোলার ক্লাস

REST API এর মাধ্যমে Pagination এবং Sorting এর ডেটা প্রদান করুন।

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @GetMapping
    public Page<Employee> getEmployees(
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "10") int size,
            @RequestParam(defaultValue = "name") String sortBy,
            @RequestParam(defaultValue = "asc") String sortDirection
    ) {
        return employeeService.getEmployees(page, size, sortBy, sortDirection);
    }
}

Pagination এবং Sorting ব্যবহার করার পদ্ধতি

API কল করার সময় Query Parameters ব্যবহার করে Pagination এবং Sorting কাস্টমাইজ করা যায়। উদাহরণস্বরূপ:

  • ডেটা পেজ আকারে পেতে:

    GET /employees?page=1&size=5
    
  • ডেটা নির্দিষ্ট ক্রমানুসারে সাজাতে:

    GET /employees?sortBy=name&sortDirection=desc
    

Pagination এবং Sorting এর সুবিধা

  • বড় ডেটাসেট পরিচালনা: বড় আকারের ডেটা সহজে দেখা ও প্রক্রিয়া করা যায়।
  • পারফরম্যান্স উন্নত করে: ছোট ডেটাসেট লোড করে সার্ভারের লোড কমানো যায়।
  • ব্যবহারকারী অভিজ্ঞতা উন্নত করে: পেজভিত্তিক ডেটা দেখানোর ফলে ব্যবহারকারীদের অভিজ্ঞতা আরও ভালো হয়।
  • ডেটা সাজানোর নমনীয়তা: যে কোনো ফিল্ডে ASC বা DESC অর্ডারে ডেটা সাজানো যায়।

Pagination এবং Sorting Spring Boot ORM এর একটি শক্তিশালী ফিচার যা ডেটাবেস অপারেশন আরও সংগঠিত এবং কার্যকর করে। এটি ব্যবহার করে ডেভেলপাররা দ্রুত এবং সহজে ডেটা ম্যানেজ করতে পারে।

Content added By

Pagination এবং Sorting এর প্রয়োজনীয়তা

160

স্প্রিং বুট ORM-এ ডেটাবেস থেকে ডেটা ফেচ করার সময় Pagination এবং Sorting একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। বড় ডেটাসেট নিয়ে কাজ করার সময় এই দুটি ফিচার ডেটার কার্যকর ব্যবস্থাপনা এবং প্রয়োগে সাহায্য করে।


Pagination (পাতায় বিভাজন)

Pagination হলো বড় ডেটাসেটকে ছোট ছোট পৃষ্ঠায় বিভক্ত করার একটি প্রক্রিয়া, যা ক্লায়েন্ট অ্যাপ্লিকেশন বা UI-তে ডেটা প্রদর্শন সহজ করে।

Pagination-এর প্রয়োজনীয়তা:

  1. পারফরম্যান্স উন্নয়ন: ডাটাবেস থেকে বড় আকারের ডেটাসেট একবারে ফেচ না করে ছোট ছোট অংশে ফেচ করলে সার্ভারের লোড কমে।
  2. ব্যবহারকারীর অভিজ্ঞতা বৃদ্ধি: একাধিক পৃষ্ঠায় ডেটা প্রদর্শন করলে ব্যবহারকারী সহজে ডেটা দেখতে পারেন।
  3. মেমোরি ব্যবস্থাপনা: ডেটার অংশ অনুযায়ী মেমোরি ব্যবহারের সুযোগ দেয়।
  4. ডেটা লোডিং অপ্টিমাইজেশন: ডেটার নির্দিষ্ট অংশ লোড করার ফলে নেটওয়ার্ক ট্রাফিক কম হয়।

Sorting (ডেটা ক্রমানুসারে সাজানো)

Sorting হলো ডেটাসেটকে নির্দিষ্ট ক্রমে সাজানোর প্রক্রিয়া। এটি বর্ধিত ব্যবহারকারীর অভিজ্ঞতা এবং কার্যকর ডেটা বিশ্লেষণের জন্য গুরুত্বপূর্ণ।

Sorting-এর প্রয়োজনীয়তা:

  1. ডেটার অর্থপূর্ণ উপস্থাপন: ডেটা ক্রমানুসারে সাজানো থাকলে এটি ব্যবহারকারীদের জন্য আরও অর্থপূর্ণ হয়।
  2. ডেটা অনুসন্ধান সহজ করে: প্রয়োজন অনুযায়ী সাজানো ডেটা দ্রুত খুঁজে পাওয়া যায়।
  3. ডেটা বিশ্লেষণে সহায়ক: সুনির্দিষ্ট ক্রমে থাকা ডেটা বিশ্লেষণ সহজ করে।

Spring Boot-এ Pagination এবং Sorting

স্প্রিং ডেটা JPA-এর মাধ্যমে Pagination এবং Sorting সহজে বাস্তবায়ন করা যায়। Pageable এবং Sort ইন্টারফেস ব্যবহার করে ডেটাবেস অপারেশন সম্পন্ন করা হয়।


Pagination এবং Sorting-এর উদাহরণ

Repository ইন্টারফেস উদাহরণ

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    Page<Product> findByNameContaining(String name, Pageable pageable);
}

Service লেয়ারে Pagination এবং Sorting

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public Page<Product> getProducts(String name, int page, int size) {
        Pageable pageable = PageRequest.of(page, size); // Pagination
        return productRepository.findByNameContaining(name, pageable);
    }
}

Controller উদাহরণ

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {

    @Autowired
    private ProductService productService;

    @GetMapping("/products")
    public Page<Product> getProducts(
            @RequestParam(defaultValue = "") String name,
            @RequestParam(defaultValue = "0") int page,
            @RequestParam(defaultValue = "10") int size) {
        return productService.getProducts(name, page, size);
    }
}

Sorting যুক্ত করা

Sorting যুক্ত করতে PageRequest-এর মধ্যে Sort পাস করা যায়।

Pageable pageable = PageRequest.of(page, size, Sort.by("price").ascending());

উদাহরণ:

public Page<Product> getProductsSorted(String name, int page, int size) {
    Pageable pageable = PageRequest.of(page, size, Sort.by("name").descending()); // Sorting by name in descending order
    return productRepository.findByNameContaining(name, pageable);
}

সুবিধা

  1. ডেটা নিয়ন্ত্রণ: Pagination-এর মাধ্যমে বড় ডেটাসেটের একযোগে লোডিং এড়ানো যায়।
  2. সার্ভার দক্ষতা: বড় ডেটাসেট নিয়ে কাজ করার সময় সার্ভার রিসোর্সের সঠিক ব্যবহার।
  3. ইউজার-ফ্রেন্ডলি: Pagination এবং Sorting ব্যবহারকারীর জন্য সহজ এবং কার্যকর ডেটা উপস্থাপনা নিশ্চিত করে।
  4. ডেটাবেস পারফরম্যান্স: ডেটাবেস কেরি দ্রুত সম্পন্ন হয়।

Pagination এবং Sorting এর মাধ্যমে স্প্রিং বুট অ্যাপ্লিকেশনে ডেটা ফেচিং কার্যকর এবং ব্যবহারকারী-বান্ধব করা যায়। এটি বড় ডেটাসেটের সঙ্গে কাজ করার সময় অপরিহার্য একটি ফিচার।


Content added By

Pageable এবং Sort Interface এর ব্যবহার

178

স্প্রিং বুট (Spring Boot) এ Pageable এবং Sort ইন্টারফেস ব্যবহার করে ডাটাবেস থেকে ডেটার পেজিনেশন এবং সঠিক ক্রমে (Sorting) ডেটা রিটার্ন করা যায়। এগুলো ব্যবহার করে বড় ডেটাসেটকে ছোট ছোট অংশে বিভক্ত করা এবং সেগুলোকে প্রয়োজন অনুযায়ী সাজানো সহজ হয়।


Pageable Interface

Pageable ইন্টারফেসটি পেজিনেশন কার্যকর করার জন্য ব্যবহৃত হয়। এটি ডাটার একটি নির্দিষ্ট অংশ (পেজ) ফেরত দেয় এবং প্রতিটি পেজে কতগুলো রেকর্ড থাকবে তা নির্ধারণ করে।

PageRequest তৈরি করা

PageRequest ক্লাসটি Pageable ইন্টারফেসের ইমপ্লিমেন্টেশন সরবরাহ করে। এটি পেজ নম্বর এবং পেজ সাইজ নির্ধারণে ব্যবহৃত হয়।

Pageable pageable = PageRequest.of(pageNumber, pageSize);

Sort Interface

Sort ইন্টারফেসটি ডেটা ক্রমবদ্ধ (Ascending বা Descending) করার জন্য ব্যবহৃত হয়। এটি এক বা একাধিক ফিল্ডের উপর ভিত্তি করে ডেটাকে সাজানোর সুযোগ দেয়।

Sort এর উদাহরণ

Ascending এবং Descending উভয় ধরণের ক্রমবিন্যাস করা যায়।

Sort sort = Sort.by("fieldName").ascending();
Sort sortDescending = Sort.by("fieldName").descending();

Pageable এবং Sort একসাথে ব্যবহার

Pageable এবং Sort একত্রে ব্যবহার করে পেজিনেটেড এবং সঠিক ক্রমে সাজানো ডেটা ফিল্টার করা সম্ভব।

Pageable pageable = PageRequest.of(pageNumber, pageSize, Sort.by("fieldName").ascending());

Spring Data JPA তে Pageable এবং Sort এর ব্যবহার

Repository Method

Spring Data JPA এর রেপোজিটরি ইন্টারফেসে পেজিনেশন এবং সোর্টিং ফাংশনালিটি যুক্ত করা হয়:

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ProductRepository extends JpaRepository<Product, Long> {
    Page<Product> findByCategory(String category, Pageable pageable);
}

কন্ট্রোলার এবং সার্ভিস স্তরে পেজিনেশন ও সোর্টিং প্রয়োগ

সার্ভিস লেয়ার

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

@Service
public class ProductService {
    @Autowired
    private ProductRepository productRepository;

    public Page<Product> getProductsByCategory(String category, Pageable pageable) {
        return productRepository.findByCategory(category, pageable);
    }
}

কন্ট্রোলার লেয়ার

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/products")
public class ProductController {
    @Autowired
    private ProductService productService;

    @GetMapping
    public Page<Product> getProducts(
            @RequestParam String category,
            @RequestParam int page,
            @RequestParam int size,
            @RequestParam String sortBy) {

        Pageable pageable = PageRequest.of(page, size, Sort.by(sortBy).ascending());
        return productService.getProductsByCategory(category, pageable);
    }
}

Pagination এবং Sorting এর কার্যপ্রক্রিয়া

Request URL

GET /products?category=electronics&page=0&size=5&sortBy=price

Response (JSON)

{
    "content": [
        { "id": 1, "name": "Phone", "price": 500 },
        { "id": 2, "name": "Laptop", "price": 1000 }
    ],
    "pageable": {
        "sort": { "sorted": true, "unsorted": false },
        "pageNumber": 0,
        "pageSize": 5
    },
    "totalPages": 10,
    "totalElements": 50
}

Pageable এবং Sort এর সুবিধা

  1. ডেটা ব্যবস্থাপনা সহজ: বড় ডেটাসেটকে পেজ আকারে ভাগ করা।
  2. কাস্টমাইজেশন: প্রয়োজন অনুযায়ী ডেটার ক্রমবিন্যাস ও পেজ আকার নির্ধারণ।
  3. পারফরম্যান্স উন্নতি: ডাটাবেস থেকে অপ্রয়োজনীয় ডেটা লোড না করে নির্দিষ্ট পেজের ডেটা ফেরত দেওয়া।
  4. ফ্লেক্সিবিলিটি: একাধিক ফিল্ডের উপর ভিত্তি করে সঠিক ক্রমবিন্যাস করা।

সারাংশ

Spring Boot এ Pageable এবং Sort ইন্টারফেস ব্যবহার করে ডেটার পেজিনেশন এবং সঠিক ক্রমবিন্যাস কার্যকরভাবে করা সম্ভব। এটি REST API-তে ডেটার কার্যকর ব্যবস্থাপনার জন্য একটি আদর্শ পদ্ধতি। এভাবে বড় ডেটাসেটকে ছোট অংশে ভাগ করে ব্যবহারকারীর প্রয়োজন অনুসারে ডেটা উপস্থাপন করা সহজ হয়।

Content added By

উদাহরণ সহ Pagination এবং Sorting

198

Spring Boot এবং Spring Data JPA সহজেই ডেটাবেসে Pagination (ডেটা পৃষ্ঠায় বিভক্ত) এবং Sorting (ডেটা সাজানো) অপারেশন সাপোর্ট করে। Pagination ডেটা ছোট ছোট অংশে ভাগ করে প্রদর্শন করে, যা পারফরম্যান্স উন্নত করে। Sorting ডেটাকে নির্দিষ্ট ক্রমে সাজিয়ে প্রদর্শন করতে সাহায্য করে।


Pagination এবং Sorting এর জন্য প্রয়োজনীয় ডিপেনডেন্সি

Maven ডিপেনডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

application.properties ফাইল কনফিগার করুন:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update

Entity ক্লাস তৈরি

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private double price;

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

JpaRepository ইন্টারফেস তৈরি

Spring Data JPA-এর PagingAndSortingRepository বা JpaRepository ইন্টারফেস ব্যবহার করে Pagination এবং Sorting এর সুবিধা পাওয়া যায়।

import org.springframework.data.repository.PagingAndSortingRepository;

public interface ProductRepository extends PagingAndSortingRepository<Product, Long> {
}

Controller ক্লাস তৈরি

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/products")
public class ProductController {

    @Autowired
    private ProductRepository repository;

    // Pagination
    @GetMapping("/paginate")
    public Page<Product> getPaginatedProducts(@RequestParam int page, @RequestParam int size) {
        Pageable pageable = PageRequest.of(page, size);
        return repository.findAll(pageable);
    }

    // Sorting
    @GetMapping("/sort")
    public Iterable<Product> getSortedProducts(@RequestParam String sortBy, @RequestParam String direction) {
        Sort sort = direction.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
        return repository.findAll(sort);
    }

    // Pagination with Sorting
    @GetMapping("/paginateAndSort")
    public Page<Product> getPaginatedAndSortedProducts(
            @RequestParam int page,
            @RequestParam int size,
            @RequestParam String sortBy,
            @RequestParam String direction
    ) {
        Sort sort = direction.equalsIgnoreCase(Sort.Direction.ASC.name()) ? Sort.by(sortBy).ascending() : Sort.by(sortBy).descending();
        Pageable pageable = PageRequest.of(page, size, sort);
        return repository.findAll(pageable);
    }
}

API সমূহ এবং তাদের ব্যবহার

Pagination API

  • GET: /products/paginate?page=0&size=5
    • প্রথম পৃষ্ঠা (Page 0), প্রতি পৃষ্ঠায় ৫টি আইটেম।

Sorting API

  • GET: /products/sort?sortBy=name&direction=asc
    • name এর উপর ভিত্তি করে Ascending Order
  • GET: /products/sort?sortBy=price&direction=desc
    • price এর উপর ভিত্তি করে Descending Order

Pagination এবং Sorting একত্রে

  • GET: /products/paginateAndSort?page=0&size=5&sortBy=price&direction=asc
    • প্রতি পৃষ্ঠায় ৫টি আইটেম, price এর উপর ভিত্তি করে Ascending Order

উদাহরণ ডেটা

যদি নিচের ডেটাগুলো ডেটাবেসে থাকে:

IDNamePrice
1Product A100.0
2Product B150.0
3Product C120.0
4Product D200.0
5Product E180.0
6Product F170.0

Pagination Query (page=0, size=3):

[
    { "id": 1, "name": "Product A", "price": 100.0 },
    { "id": 2, "name": "Product B", "price": 150.0 },
    { "id": 3, "name": "Product C", "price": 120.0 }
]

Sorting Query (sortBy=price, direction=asc):

[
    { "id": 1, "name": "Product A", "price": 100.0 },
    { "id": 3, "name": "Product C", "price": 120.0 },
    { "id": 2, "name": "Product B", "price": 150.0 },
    ...
]

সারাংশ

Spring Boot এবং Spring Data JPA এর Pagination এবং Sorting ফিচার ডেটা ম্যানেজমেন্টকে আরও কার্যকর ও গতিশীল করে। এর মাধ্যমে বড় ডেটাবেসে কার্যক্ষমতার সাথে ডেটা প্রদর্শন এবং সাজানো যায়। এগুলো সহজে কনফিগার এবং API টেস্টিংয়ের জন্য খুবই সহায়ক।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...